// async function async1() {
//     console.log('async1 start');
//     await async2();
//     console.log('async1 end');
// }
// async function async2() {
//     console.log('async2');
// }
// console.log('script start');
// setTimeout(function () {
//     console.log('setTimeout');
// }, 0)
// async1();
// new Promise(function (resolve) {
//     console.log('promise1');
//     resolve();
//     console.log('promise2')
// }).then(function () {
//     console.log('promise3');
// });
// console.log('script end');

// script start
// async1 start
// async2
// promise1
// promise2
// script end
// async1 end
// promise3
// setTimeout



// async function async1() {
//     console.log('1');
//     await async2();
//     console.log('2');
// }

// async function async2() {
//     console.log('3');
// }

// console.log('4');

// setTimeout(function () {
//     console.log('5');
// }, 0);

// async1();

// new Promise(function (resolve) {
//     console.log('6');
//     resolve();
// }).then(function () {
//     console.log('7');
// });

// console.log('8');

// 4
// 1
// 3
// 6
// 8
// 2
// 7
// 5

// console.log(typeof typeof typeof null);
// console.log(typeof console.log(1));
// console.log(console.log(1));

// var name = '123';

// var obj = {
//     name: '456',
//     print: function () {
//         function a() {
//             // node 环境 global对象 浏览器是window
//             console.log(this);
//             // node global对象无该属性则undefined 浏览器则是window.name  -> 123
//             console.log(this.name);
//         }
//         a();
//     }
// }

// obj.print();

// setTimeout(function () {
//     console.log(1);
// }, 100);

// new Promise(function (resolve) {
//     console.log(2);
//     resolve();
//     console.log(3);
// }).then(function () {
//     console.log(4);
//     new Promise((resove, reject) => {
//         console.log(5);
//         setTimeout(() => {
//             console.log(6);
//         }, 10);
//     })
// });
// console.log(7);
// console.log(8);

// 2
// 3
// 7
// 8
// 4
// 5
// 6
// 1

// var a = 3;
// function c() {
//     console.log(a);
// }
// (function () {
//     var a = 4;
//     c();
// })();

function Foo() {
    Foo.a = function () {
        console.log(1);
    }
    this.a = function () {
        console.log(2)
    }
}

Foo.prototype.a = function () {
    console.log(3);
}

Foo.a = function () {
    console.log(4);
}

Foo.a(); // 4
let obj = new Foo();
obj.a(); // 2
Foo.a(); // 1

console.log('first')